#include <iostream>
#include <string.h>
using namespace std;

class String {
    public:
        String(const char *str = NULL);
        void show(void);
        friend String operator+(const String &s1, const String &s2);
    private:
        char *str;
};
// 运算符重载
String operator+(const String &s1, const String &s2) {
    String newStr;
    // 运算符重载函数
    if (!s1.str || !s2.str) {
        cout << "Error , s1 or s2 is empty" <<endl;
        return newStr;
    }
    int size = strlen(s1.str) + strlen(s2.str) + 1;
    // 分配内存初始化
    newStr.str = new char[size];
    strcpy(newStr.str, s1.str);
    strcat(newStr.str, s2.str);
    return newStr;
}
String::String(const char *str) {
    if (str == NULL) {
        this->str = NULL;
    } else {
        int len = strlen(str) + 1;
        this->str = new char[len];
        strcpy(this->str , str); 
    }
}
void String::show() {
    cout <<  "str: " << str <<endl;
 }

int main(int argc, char const *argv[])
{
    String str1("hello");
    String str2("wold");
    String str = str1 + str2;
    str.show();
    return 0;
}
